package com.vision.sales.cl.data;


import java.util.Date;

import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor.Path;
import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.shared.LabelProvider;
import com.sencha.gxt.data.shared.ModelKeyProvider;
import com.sencha.gxt.data.shared.PropertyAccess;
import com.vision.core.cm.db.data.Company;
import com.vision.core.cm.db.data.CompanyGroup;
import com.vision.sales.cm.data.CollectionStatus;
import com.vision.sales.cm.data.TransactionStatus;
import com.vision.sales.cm.db.data.Customer;
import com.vision.sales.cm.db.data.Product;
import com.vision.sales.cm.db.data.SalesInvoice;
import com.vision.sales.cm.db.data.Salesman;

public interface SalesInvoiceProperties extends PropertyAccess<SalesInvoice> {
	
	public static final SalesInvoiceProperties INSTANCE = GWT.create(SalesInvoiceProperties.class);
	
	@Path("id")
	ModelKeyProvider<SalesInvoice> key();
	
	@Path("invoiceNo")
	LabelProvider<SalesInvoice> nameLabel();

	@Path("company.code")
	ValueProvider<SalesInvoice, String> companyCode();
	ValueProvider<SalesInvoice, Company> company();
	
	ValueProvider<SalesInvoice, Long> id();
	
	ValueProvider<SalesInvoice, CompanyGroup> group();
	
	ValueProvider<SalesInvoice, String> invoiceNo();
	
	ValueProvider<SalesInvoice, String> groupAndNo();
	
	ValueProvider<SalesInvoice, Date> date();
	ValueProvider<SalesInvoice, String> poNo();
	
	@Path("customer.code")
	ValueProvider<SalesInvoice, String> customerCode();
	ValueProvider<SalesInvoice, Customer> customer();
	@Path("product.code")
	ValueProvider<SalesInvoice, String> productCode();
	ValueProvider<SalesInvoice, Product> product();
	@Path("salesman.code")
	ValueProvider<SalesInvoice, String> salesmanCode();
	ValueProvider<SalesInvoice, Salesman> salesman();
	ValueProvider<SalesInvoice, Double> commissionRate();
	
	ValueProvider<SalesInvoice, String> itemsDelivered();
	ValueProvider<SalesInvoice, String> remarks();
	
	ValueProvider<SalesInvoice, Double> grossSales();
	ValueProvider<SalesInvoice, Double> amountPaid();
	ValueProvider<SalesInvoice, Double> withHoldingTaxPaid();
	
	ValueProvider<SalesInvoice, Double> advance();
	ValueProvider<SalesInvoice, Double> overruns();
	ValueProvider<SalesInvoice, Double> rejects();
	ValueProvider<SalesInvoice, Double> returns();
	ValueProvider<SalesInvoice, Double> badDebts();
	ValueProvider<SalesInvoice, Double> overpayment();
	ValueProvider<SalesInvoice, Double> netIncome();
	ValueProvider<SalesInvoice, Double> balance();
	
	ValueProvider<SalesInvoice, CollectionStatus> collectionStatus();
	
	ValueProvider<SalesInvoice, TransactionStatus> status();
	
}